#include "employeequeryform.h"
#include "ui_employeequeryform.h"
#include "httpmanager.h"
#include <QMessageBox>
#include <QJsonArray>
#include <QProgressDialog>
#include <QStandardItemModel>
#include <QDebug>
#include <QPointer>
#include <QPixmap>
#include <QByteArray>
#include <QBuffer>

EmployeeQueryForm::EmployeeQueryForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::EmployeeQueryForm),
    m_model(new QStandardItemModel(this))
{
    ui->setupUi(this);
    initTable();  // 初始化表格
}

EmployeeQueryForm::~EmployeeQueryForm()
{
    delete ui;
}

// 初始化表格结构
void EmployeeQueryForm::initTable()
{


    // 设置列数和列名
    m_model->setColumnCount(5);
    m_model->setHeaderData(0, Qt::Horizontal, "员工号");
    m_model->setHeaderData(1, Qt::Horizontal, "照片");
    m_model->setHeaderData(2, Qt::Horizontal, "员工名");
    m_model->setHeaderData(3, Qt::Horizontal, "部门");
    m_model->setHeaderData(4, Qt::Horizontal, "职位");

    // 关联模型到表格
    ui->tableView->setModel(m_model);

    // 设置表格属性
    ui->tableView->horizontalHeader()->setStretchLastSection(true);
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    // 调整照片列宽度
    ui->tableView->setColumnWidth(1, 100);
    ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);
}

// 填充表格数据
void EmployeeQueryForm::fillTable(const QJsonArray &employees)
{
    m_model->removeRows(0, m_model->rowCount());  // 清空现有数据

    for (int i = 0; i < employees.size(); ++i) {
        if (!employees[i].isObject()) {
            qDebug() << "警告：第" << i << "条记录不是JSON对象";
            continue;
        }
        QJsonObject emp = employees[i].toObject();

        // 安全获取字段（处理可能为空的情况）
        QString empId = emp.contains("employeeId") ? emp["employeeId"].toString() : "未知";
        QString name = emp.contains("name") ? emp["name"].toString() : "未知";
        QString dept = emp.contains("department") ? emp["department"].toString() : "";  // 允许为空
        QString position = emp.contains("position") ? emp["position"].toString() : "";  // 允许为空

        // 处理照片（假设照片以Base64字符串存储）
        QStandardItem *photoItem = new QStandardItem();
        if (emp.contains("photo") && !emp["photo"].toString().isEmpty()) {
            QByteArray imgData = QByteArray::fromBase64(emp["photo"].toString().toUtf8());
            QPixmap pixmap;
            if (pixmap.loadFromData(imgData)) {
                // 缩放照片适应表格单元格
                pixmap = pixmap.scaled(80, 80, Qt::KeepAspectRatio, Qt::SmoothTransformation);
                photoItem->setData(pixmap, Qt::DecorationRole);
            } else {
                photoItem->setText("图片无效");
            }
        } else {
            photoItem->setText("无照片");
        }

        // 创建表格行项，并逐个设置居中
        QList<QStandardItem*> rowItems;

        QStandardItem* idItem = new QStandardItem(empId);
        idItem->setTextAlignment(Qt::AlignCenter);  // 员工号居中
        rowItems.append(idItem);

        rowItems.append(photoItem);  // 已设置居中

        QStandardItem* nameItem = new QStandardItem(name);
        nameItem->setTextAlignment(Qt::AlignCenter);  // 员工名居中
        rowItems.append(nameItem);

        QStandardItem* deptItem = new QStandardItem(dept);
        deptItem->setTextAlignment(Qt::AlignCenter);  // 部门居中
        rowItems.append(deptItem);

        QStandardItem* posItem = new QStandardItem(position);
        posItem->setTextAlignment(Qt::AlignCenter);  // 职位居中
        rowItems.append(posItem);

        // 设置所有项不可编辑
        foreach (QStandardItem* item, rowItems) {
            item->setEditable(false);
        }

        m_model->appendRow(rowItems);

    }
}

void EmployeeQueryForm::on_pushButton_clicked()
{
    // 获取查询参数
    QString name = ui->lineEdit->text().trimmed();

    // 输入校验
    if (name.isEmpty()) {
        QMessageBox::warning(this, "输入错误", "员工姓名不能为空");
        return;
    }

    // 显示加载提示
    QProgressDialog *loading = new QProgressDialog("正在查询员工信息...", "取消", 0, 0, this);
    loading->setWindowTitle("处理中");
    loading->setWindowModality(Qt::WindowModal);
    loading->show();

    // 使用QPointer保护当前窗口指针
    QPointer<EmployeeQueryForm> self(this);

    // 构建请求参数
    QMap<QString, QString> params;
    params["name"] = name;

    // 发送GET请求
    HttpManager::instance()->get(
                QString(SERVER_BASE_URL) + "/api/employee/by_name",
                params,
                // 成功回调
                [self, loading](const QJsonObject& result) {
        loading->close();
        delete loading;

        if (!self) return;

        if (result["success"].toBool()) {
            QJsonArray employees = result["data"].toArray();
            self->fillTable(employees);

            // 更新label_2显示查询结果
            QString resultText;
            if (employees.isEmpty()) {
                resultText = "未找到符合条件的员工";
            } else {
                resultText = QString("共查询到 %1 名员工").arg(employees.size());
            }
            self->ui->label_2->setText(resultText);  // 显示到label_2

            // 同时显示消息框（保持原有逻辑）
            QMessageBox::information(self, "查询结果", resultText);
        } else {
            QString errorMsg = result.contains("error") ?
                        result["error"].toString() : "查询失败，请重试";
            self->ui->label_2->setText("查询失败：" + errorMsg);  // 错误信息也显示到label_2
            self->ui->label_2->setAlignment(Qt::AlignCenter);
            QMessageBox::warning(self, "查询失败", errorMsg);
        }
    },
    // 错误回调
    [self, loading](int code, const QString& msg) {
        loading->close();
        delete loading;

        if (!self) return;

        QString errorText = QString("网络错误：错误码%1，%2").arg(code).arg(msg);
        self->ui->label_2->setText(errorText);  // 网络错误显示到label_2
        self->ui->label_2->setAlignment(Qt::AlignCenter);
        QMessageBox::critical(self, "网络错误", errorText);
    }
    );
}
